home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / c / berm122 / pandora.h < prev    next >
C/C++ Source or Header  |  1993-08-16  |  22KB  |  457 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. #include <time.h>
  5.  
  6. #define LINN
  7.  
  8. #define __PROTO__       1
  9.  
  10. /* compiler, CHOOSE ONE OF THIS (or all 0 for Windows NT) */
  11. #define TC              0               /* Turbo C 1.5 compiler         */
  12. #define ASTEC           0               /* CPM Astec 1.06D compiler     */
  13. #define AMIGA           0               /* Not yet...                   */
  14. #define MEGAMAX         0               /* Atari MegaMax 1.1 compiler   */
  15. #define MWC             0
  16. #define STTC            0               /* Atari ST, Turbo C 2.0        */
  17. #define UNIX            1                /* Unix ansi compiler            */
  18.  
  19. #define DIRSEP        '\\'
  20.  
  21. #if    UNIX
  22. #include <stdlib.h>
  23. #define MC68000         1               /* Motorola storage not used    */
  24. #define MSDOS           0               /* Flexible file system         */
  25. #define CPM             0               /* Pad files to CP/M records    */
  26. #define BREAD           "r"
  27. #define BWRITE          "w"
  28. #define BRUP            "r+"
  29. #define BWUP            "w+"
  30. #define uclose(f)       { if (f) fclose(f); f = NULL; }
  31. #define useek(f,a,m)    if (f) fseek(f, a, m);
  32. #undef DIRSEP
  33. #define DIRSEP        '/'
  34. /* ... */
  35. #define cdecl
  36. /* BSD alias for ansi libs */
  37. #define memmove        memcpy
  38. #define    strnicmp    strncasecmp
  39. #define stricmp        strcasecmp
  40. #define remove        unlink
  41. #endif
  42.  
  43. #ifdef WIN32
  44. #include <stdlib.h>
  45. #define BWIN32            1                /* used in utextra.c */
  46. #define MC68000            0
  47. #define MSDOS           0               /* Flexible file system (unused)*/
  48. #define CPM             0               /* Pad files to CP/M records    */
  49. #define BREAD           "rb"
  50. #define BWRITE          "wb"
  51. #define BRUP            "rb+"
  52. #define BWUP            "wb+"
  53. #define uclose(f)       { if (f) fclose(f); f = NULL; }
  54. #define useek(f,a,m)    if (f) fseek(f, a, m);
  55. #endif
  56.  
  57. #if     TC
  58. #include <stdlib.h>
  59. #include <setjmp.h>
  60.  
  61. #define MC68000         0               /* Motorola storage not used    */
  62. #define MSDOS           1               /* Flexible file system         */
  63. #define CPM             0               /* Pad files to CP/M records    */
  64. #define BREAD           "rb"
  65. #define BWRITE          "wb"
  66. #define BRUP            "r+b"
  67. #define BWUP            "w+b"
  68.  
  69. #define uclose(f)       fclose(f)
  70. #define rewind(f)       fseek(f, 0L, 0)
  71. #define useek(f,a,m)    fseek(f,a,m)
  72. #endif
  73.  
  74. #if MEGAMAX                             /* no filepointer ok check!     */
  75. #define MC68000         1               /* Motorola storage used        */
  76. #define MSDOS           1               /* Flexible file system         */
  77. #define CPM             0               /* Pad files to CP/M records    */
  78. #define BREAD           "br"
  79. #define BWRITE          "bw"
  80. #define BRUP            "br+"
  81. #define BWUP            "bw+"
  82.  
  83. #define uclose(f)       { if (f) fclose(f); f = NULL; }
  84. #define rewind(f)       if (f) fseek(f, 0L, 0);
  85. #define useek(f,a,m)    if (f) fseek(f, a, m);
  86. #endif
  87.  
  88. #if MWC                                 /* no filepointer ok check!     */
  89. #include <setjmp.h>
  90. #define MC68000         1               /* Motorola storage used        */
  91. #define MSDOS           1               /* Flexible file system         */
  92. #define CPM             0               /* Pad files to CP/M records    */
  93. #define BREAD           "rb"
  94. #define BWRITE          "wb"
  95. #define BRUP            "r+b"
  96. #define BWUP            "w+b"
  97.  
  98. #define uclose(f)       { if (f) fclose(f); f = NULL; }
  99. #define rewind(f)       if (f) fseek(f, 0L, 0);
  100. #define useek(f,a,m)    if (f) fseek(f, a, m);
  101. #endif
  102.  
  103. #if STTC                                /* no filepointer ok check!     */
  104. #include <stdlib.h>
  105. #include <setjmp.h>
  106. #include <ext.h>                        /* LINN */
  107. #define MC68000         1               /* Motorola storage used        */
  108. #define MSDOS           1               /* Flexible file system         */
  109. #define CPM             0               /* Pad files to CP/M records    */
  110. #define BREAD           "rb"
  111. #define BWRITE          "wb"
  112. #define BRUP            "r+b"
  113. #define BWUP            "w+b"
  114.  
  115. #define uclose(f)       { if (f) fclose(f); f = NULL; }
  116.  
  117. #ifdef LATTICE
  118. #define cdecl __stdargs
  119. #define environ environn /* environ already used */
  120. #endif
  121. #define useek(f,a,m)    if (f) fseek(f, a, m);
  122. #define movmem(s,d,n)    memmove((d),(s),(n))
  123. #endif
  124.  
  125. #if ASTEC                               /* no filepointer ok check!     */
  126. #include <setjmp.h>
  127.  
  128. #define MC68000         0               /* Motorola storage not used    */
  129. #define MSDOS           0               /* Flexible file system         */
  130. #define CPM             1               /* Pad files to CP/M records    */
  131. #define BREAD           "r"
  132. #define BWRITE          "w"
  133. #define BRUP            "r+"
  134. #define BWUP            "w+"
  135.  
  136. #define fopen           uopen           /* path simulation              */
  137. #define uclose(f)       { if (f) fclose(f); f = NULL; }
  138. #define rewind(f)       if (f) fseek(f, 0L, 0);
  139. #define useek(f,a,m)    if (f) fseek(f, a, m);
  140. #endif
  141.  
  142. #if     MC68000==0
  143. #define inteli(x)       (x)
  144. #define intell(x)       (x)
  145. #endif
  146.  
  147. #define VERSION         "2.41b"         /* Current Version of Pandora   */
  148. #define ERROR           -1              /* Error value                  */
  149. #define NOFILE          (FILE *)0       /* fopen didn't work            */
  150. #define CPMEOF          0x1A            /* CP/M EOF mark                */
  151. #define SOH             1               /* Start Of Header              */
  152. #define EOT             4               /* End of Transmission          */
  153. #define ACK             6               /* Acknowledge                  */
  154. #define NAK             21              /* Not Acknowledge              */
  155. #define SYN             0x16            /* Telinkblock header           */
  156. #define CAN             0x18            /* Cancel transfer              */
  157. #define CRC             0x43            /* CRC mode requested           */
  158. #define SUB             0x1A            /* End of modem7 filename       */
  159. #define ERRORMAX        10              /* Max error by up/down-load    */
  160. #define RETRYMAX        30              /* Max retry per record         */
  161. #define TIMEOUT         -1              /* Received timed out           */
  162. #define SECSDAY         86400L          /* # seconds/day                */
  163. #define Ctrl_A          0x01            /* Simultanious keyboard ON     */
  164. #define Ctrl_C          0x03            /* ^C value                     */
  165. #define Ctrl_Z          0x1A            /* Simultanious keyboard OFF    */
  166. #define TRUE            1               /* Good, Ok, Success, Hoera!    */
  167. #define FALSE           0               /* all but the above            */
  168. #define FOREVER         for (;;)        /* Loop forever                 */
  169. #define N_AREAS        500        /* Maximum number of areas        */
  170.  
  171. #ifndef u_int
  172. #define u_int           unsigned short int /* posix symbol may be defined */
  173. #endif
  174.  
  175. #define MSGLEN          16384           /* Length of MESSAGE buffer     */
  176.  
  177. #define TWIT            00
  178. #define GUEST           10
  179. #define NORMAL          20
  180. #define PRIV            30
  181. #define SUPER           40
  182. #define SYSOP           50
  183. #define HIDDEN          60
  184. #define NRPRIV          6
  185.  
  186. #define PRIVATE         0x0001          /* Flag private bit             */
  187. #define CRASH           0x0002          /* Mail: crash message          */
  188. #define RECEIVED        0x0004          /* Flag received bit            */
  189. #define SENT            0x0008          /* Mail: msg has been sent      */
  190. #define FILEATCH        0x0010          /*       msg has file attached  */
  191. #define MSGFWD          0x0020          /*       msg has been send      */
  192. #define KILLSEND        0x0080          /*       kill/send              */
  193. #define ORPHAN          0x0040          /*       unknown destination    */
  194. #define MSGLOCAL        0x0100          /*       message entered here   */
  195. #define MSGHOLD         0x0200          /*       hold message for pickup*/
  196. #ifdef LINN
  197. #define DIRECT          0x0400          /*       no route but no crash  */
  198. #define NOKILL          0x0800          /*       no kill by crunch      */
  199. #endif
  200. #define DELETED         0x8000          /* Flag deleted bit             */
  201.  
  202. #define MAIL            1               /* Area is Mail area            */
  203. #define ECHO            2               /* Area is Echo area            */
  204. #define PRIVEON         4               /* private msgs allowed         */
  205. #define TAMON           8               /* ask throw away msg?          */
  206. #define KSON            16              /* ask KILL/SEND?               */
  207. #define CTRLA           32              /* Remove CtrlA lines for SYSOP */
  208. #define SEENBYON        64              /* Remove SEEN-BY's             */
  209.  
  210. #define SIM_OFF         0               /* Not in simultane mode        */
  211. #define SIM_ON          1               /* Double keyboards at work     */
  212. #define SIM_CHAT        2               /* Sysop chatting with user     */
  213.  
  214. #define PORTS           7               /* Bitmask for 8 possible ports */
  215. #define WARNING         8               /* 2 minute warning had         */
  216. #define TEST            16              /* Test mode (no remote echo)   */
  217. #define YELL            32              /* Yell disabled                */
  218. #define HAYES           64              /* Hayes modem?                 */
  219. #define AFTER           128             /* Sysop wants time after user  */
  220. #define TB              256             /* Called from TheBox, no init  */
  221. #define EXTRA           512             /* Extra info by Up/Down-load   */
  222. #define LOGALL          1024            /* All user input to LOGfile    */
  223.  
  224. #define OK              0               /* Normal termination           */
  225. #define FATAL           1               /* Fatal termination            */
  226. #define OUTER           2               /* Proceed with Outer           */
  227. #define MAILEXIT        3               /* Proceed with Mailer          */
  228.  
  229. #define FULL            0               /* Full treatment               */
  230. #define NEWS            1               /* Welcome only                 */
  231. #define BULL            2               /* Bulletin only                */
  232. #define NONE            3               /* No news, no welcome          */
  233.  
  234. #define pushBRK         setjmp( Cbuf[ ++Ccount ] )
  235. #define popBRK          Ccount--
  236. #define jmpBRK(val)     longjmp( Cbuf[ Ccount ],val )
  237.  
  238. struct Reply {
  239.         u_int           msgnr;          /* 1 based                      */
  240.         struct  Reply   *next;          /* to next reply                */
  241. };
  242.  
  243. struct Parent {
  244.         u_int           msgnr;          /* 1 based                      */
  245.         struct  Parent  *next;          /* to next parent               */
  246.         struct  Reply   *Rchain;        /* to reply numbers             */
  247. };
  248.  
  249. #ifdef PANDORA
  250. char    invoer[132],                    /* linebuffer for user input    */
  251.         *Ppath,                         /* Pointer to Pandora Path      */
  252.         *input,                         /* next pointer to invoer       */
  253.         *cmdstr,                        /* current pointer to invoer    */
  254.         Xpos,                           /* Screen X position            */
  255.         Ypos,                           /* Screen Y position            */
  256.         echo = TRUE,                    /* Echo "." ?                   */
  257.         special,                        /* special (Log etc.)           */
  258.         simultane,                      /* Simultane keyboard on?       */
  259.         HGUPen,                         /* How to handle userhangup     */
  260.         Cen;                            /* May the user ^C?             */
  261. int     flags,                          /* Various flag bits            */
  262.         tlimit,                         /* users time limit             */
  263.         number,                         /* Global number for getstr     */
  264.         ontime,                         /* users accumlated ontime      */
  265.         maxtime;                        /* max. time for this user      */
  266. u_int   highest,                        /* highest msgs in file         */
  267.         nrmsg,                          /* number of msgs in file       */
  268.         pHDR,                           /* current hdr in memory        */
  269.         *LastRead,                      /* Lastread msgs[C.Areas]       */
  270.         baud,                           /* users baudrate               */
  271.         Ccount;                         /* Ptr for Cbuf 'stack'         */
  272.  
  273. FILE    *LOG,                           /* Pointer in Logfile           */
  274.         *LBR,                           /* Pointer in Library           */
  275.         *CFG,                           /* Pointer in Config            */
  276.         *PWD,                           /* Pointer in Password          */
  277.         *MSG,                           /* Pointer to MSGs              */
  278.         *HDR,                           /* Pointer to HDRs              */
  279.         *FIL,                           /* Pointer to FILES.x           */
  280.         *fp;                            /* Pointer for temp files       */
  281.  
  282. struct  Parent  *Parents;
  283.  
  284. char    MESSAGE[MSGLEN],                /* Storage min. 2048 bytes      */
  285.         prefix[80];                     /* Used in MSGS/FILE as prefix  */
  286.  
  287. long    Ulast,                          /* Last time user logged in     */
  288.         logintime;                      /* Time the user logged in      */
  289.  
  290. jmp_buf Cbuf[20],                       /* Space for Setjump's          */
  291.         Hbuf;
  292. #else
  293. #ifndef MAILER
  294. extern  char            invoer[], *Ppath, *input, *cmdstr, Xpos, Ypos,
  295.                         special, echo, simultane, HGUPen, Cen;
  296. extern  int             flags, tlimit, ontime, number, maxtime;
  297. extern  u_int           highest, nrmsg, pHDR, baud, *LastRead, Ccount;
  298. extern  long            Ulast,logintime;
  299. extern  FILE            *LOG, *LBR, *CFG, *PWD, *MSG, *HDR, *FIL, *fp;
  300. extern  struct  Parent  *Parents;
  301. extern  char            MESSAGE[], prefix[];
  302. extern  jmp_buf         Cbuf[], Hbuf;
  303. #endif
  304. #endif
  305.  
  306. /* Record structure for User, do NOT alter lightly! */
  307.  
  308. struct User {
  309.  char   name[36],                       /* Name of User                 */
  310.         pass[16],                       /* Password of User             */
  311.         plaats[16];                     /* Home site of User            */
  312.  long   lcall;                          /* Last time User called        */
  313.  u_int  nrcall,                         /* number of calls              */
  314.         Mallow,                         /* Group mask for user area's   */
  315.         Fallow,                         /* Group mask for user area's   */
  316.         credit,                         /* credit of user (cents)       */
  317.         upload,                         /* #K uploaded FROM user        */
  318.         down,                           /* #K downloaded TO user (total)*/
  319.         todown,                         /* downloaded today             */
  320.         tontime;                        /* accumulated inlogtime        */
  321.  char   Access,                         /* Privilage of user            */
  322.         Marea,                          /* Last MSGS area               */
  323.         Farea,                          /* Last FILE area               */
  324.         width,                          /* width of user terminal       */
  325.         length,                         /* length of user terminal      */
  326.         help,                           /* user help level              */
  327.         more,                           /* "More?" on?                  */
  328.         tabs,                           /* Tabs expand on?              */
  329.         nuls,                           /* howmany nuls after LF?       */
  330.         intro,                          /* how to introcuce?            */
  331.         term;                           /* form feed, 0 = nc            */
  332. #if     CPM
  333.  char   _pad[29];                       /* Pad to CP/M record boundery  */
  334. #endif
  335. };
  336.  
  337. /* record structure for .HDR, do NOT alter lightly! */
  338.  
  339. struct Hdr {
  340.  char   from[36],                       /* User who created msg         */
  341.         to[36],                         /* User who may read msg        */
  342.         topic[72],                      /* Topic of msg                 */
  343.         time[20];                       /* Date/Time string of message  */
  344.  long   create,                         /* Date when MSGS was received  */
  345.         Mstart;                         /* Start offset of message      */
  346.  u_int  up,                             /* NC                           */
  347.         parent,                         /* Parent # of this msg         */
  348.         flags,                          /* Attribute bits               */
  349.         mailer[8],                      /* needed for the mailer        */
  350.         size,                           /* # bytes in message           */
  351.         reads,                          /* Number of times read         */
  352.         cost,                           /* Cost of message*100          */
  353.         Ozone,
  354.         Onet,                           /* Net on which msg was created */
  355.         Onode,                          /* Node on which msg was created*/
  356.         Opoint,
  357.         Dzone,
  358.         Dnet,                           /* Destination net for msg      */
  359.         Dnode,                          /* Destination node for msg     */
  360.         Dpoint;
  361. #if     CPM
  362.  char   _pad[40];                       /* Pad to CP/M record boundery  */
  363. #endif
  364. };
  365.  
  366. struct CONFIG {
  367.  u_int  BBSZone,                        /* Pandora zone number          */
  368.         BBSNet,                         /* Pandora node number          */
  369.         BBSNode,                        /* Pandora net number           */
  370.         times,                          /* # Pandora times called       */
  371.         Factor,                         /* Cost factor ( normal 1.00 )  */
  372.         upcount,                        /* Number of files uploaded     */
  373.         Init,                           /* First time login access level*/
  374.         Areas;                          /* Number of areas in SYSTEM.BBS*/
  375.  long   quote;                          /* Offset in quotes file        */
  376.  u_int  Yfrom,                          /* Yell open time               */
  377.         Ytill,                          /* Yell close time              */
  378.         Bfrom,                          /* Pandora open time            */
  379.         Btill,                          /* Pandora close time           */
  380.         Mal,                            /* Initial Msgs area's allowed  */
  381.         Fal,                            /* Initial File area's allowed  */
  382.         ttime[NRPRIV],                  /* Time limits / level / 24hr   */
  383.         tlim[NRPRIV],                   /* Time limits / level / call   */
  384.         dlim[NRPRIV];                   /* Download limit per 24Hrs     */
  385.  char   system,                         /* Kind of Pandora system       */
  386.         Sysop[36],                      /* Name of SYSOP                */
  387.         Main[16],                       /* Min. access level main cmd's */
  388.         Upath[80],                      /* Upload path                  */
  389.         Fpath[80],                      /* Path to FILE area            */
  390.         MdmInit[80],                    /* Modem Init string (send once)*/
  391.         MdmReset[80],                   /* Modem Reset string (send once)*/
  392.         Currency[6];                    /* 0-4 Currency str, 5 bits     */
  393.  int    MdmSpeed;                       /* Modem startup Baudrate       */
  394. #if     CPM
  395.  char   _pad[17];                       /* Pad to CP/M record boundery  */
  396. #endif
  397. };
  398.  
  399. struct SYSTEM {
  400.  int    Mgroup,                         /* Allowable MSGS groups bits   */
  401.         Fgroup,                         /* Allowable FILE groups bits   */
  402.         Uarea;                          /* Upload area                  */
  403.  char   Mpath[78],                      /* Path to MSGS area            */
  404.         Mname[32],                      /* Name current MSGS area       */
  405.         Fname[32],                      /* Name current FILE area       */
  406.         MSGSacc[16],                    /* Min. access level msgs area  */
  407.         FILEacc[16];                    /* Min. access level file area  */
  408. #if     CPM
  409. /* char _pad[0];                        /+ Pad to CP/M record boundery  */
  410. #endif
  411. };
  412.  
  413. struct TERMCAP {
  414.         char    Name[16];               /* Terminal Name :              */
  415.         char    Cls[16];                /*              Clear Screen    */
  416.         char    GotoXy[16];             /*              Goto(X,Y)       */
  417.         char    InsLine[16];            /*              Insert line     */
  418.         char    DelLine[16];            /*              Delete Line     */
  419.         char    Invert[16];             /*              Invert video    */
  420.         char    Normal[15];             /*              Normal video    */
  421.         char    Reverse;                /*      Use gotoYX ipv gotoXY   */
  422. };
  423.  
  424. #define ARCMARK         26              /* compatible with ARC & PXARC  */
  425. #define ARCVER          9               /* max storage version number   */
  426.  
  427. struct heads {                          /* archive entry header format  */
  428.         char    name[13];               /* file name                    */
  429.         long    size;                   /* size of file, in bytes       */
  430.         u_int   date;                   /* creation date                */
  431.         u_int   time;                   /* creation time                */
  432.         int     crc;                    /* cyclic redundancy check      */
  433.         long    length;                 /* true file length             */
  434.         char    ver;                    /* Coding principle of file     */
  435. };
  436.  
  437. #ifdef PANDORA
  438.         struct User             U;
  439.         struct Hdr              hdr;
  440.         struct TERMCAP          Term;
  441.         struct CONFIG           C;
  442.         struct SYSTEM           S;
  443. #else
  444. #ifndef MAILER
  445.         extern  struct User     U;
  446.         extern  struct Hdr      hdr;
  447.         extern  struct TERMCAP  Term;
  448.         extern  struct CONFIG   C;
  449.         extern  struct SYSTEM   S;
  450. #endif
  451. #endif
  452.  
  453. long time();
  454. char *TimeStr(),*DateStr(), *strstr();
  455. FILE *uopen();
  456.  
  457.